~~~c++
#include <cstdio>
#include <iostream>
#include <cstring>      //memset()的头文件
#include <sys/socket.h> //socket(),connect()等函数的头文件
#include <netinet/in.h> //sockaddr_in的头文件
#include <arpa/inet.h>  //inet_pton()函数的头文件
#include <unistd.h>     //close()函数的头文件
#include <pthread.h>    //pthread创建线程和管理线程的头文件
using namespace std;

#define BUF_SIZE 1024
char szMsg[BUF_SIZE];//定义一个全局变量，字符数组。
 
// 发送消息
void *Send(void *sock)
{
    while (1)
    {
        string buffer;
        getline(cin, buffer);
        //  getline() 读取整行输入，直到遇到换行符 '\n'。它会将换行符丢弃，
        //也不会将其留在缓冲区中(scanf会将换行符留在缓冲区中，导致后面的内容输入输出出现问题)
        
        if (send(*(int *)sock, buffer.c_str(), buffer.size(), 0) < 0)
        {
            perror("发送失败，系统可能炸了");
            return (void *)-1;
        }
    }
    return NULL;
}

// 接收消息
void *Recv(void *sock)
{
    char buffer[BUF_SIZE];
    while (1)
    {
        memset(buffer, 0, sizeof(buffer)); // 清空接收缓冲区
        int bytesReceived = recv(*(int *)sock, buffer, sizeof(buffer)-1, 0);
        if (bytesReceived < 0)
        {
            perror("接受消息失败,系统要炸!!!");
            return (void *)-1;
        }
        else if (bytesReceived == 0)
        {
            cout << "连接已关闭" << endl;
            return (void *)0;
        }
        else
        {
            cout << bytesReceived << " " << buffer << endl;
        }
    }
}

int main()
{
    // 创建socket
    int hSock;
    hSock = socket(AF_INET, SOCK_STREAM, 0);
    if (hSock < 0)
    {
        perror("socket creation failed");
        return -1;
    }

    // 绑定端口
    sockaddr_in servAdr;
    memset(&servAdr, 0, sizeof(servAdr));
    servAdr.sin_family = AF_INET;
    servAdr.sin_port = htons(端口号);
    servAdr.sin_addr.s_addr = inet_addr("远程ip地址");

    // 连接到服务器
    if (connect(hSock, (struct sockaddr *)&servAdr, sizeof(servAdr)) < 0)
    {
        perror("Connection Failed");
        return -1;
    }
    else
    {
        printf("欢迎来到私人聊天室,请输入你的聊天用户名:");
    }

    // 创建线程
    pthread_t sendThread, recvThread;
    if (pthread_create(&sendThread, NULL, Send, (void *)&hSock))
    {
        perror("创建发送消息线程失败");
        return -1;
    }

    if (pthread_create(&recvThread, NULL, Recv, (void *)&hSock))
    {
        perror("创建接收消息线程失败");
        return -1;
    }

    // 等待线程结束
    pthread_join(sendThread, NULL);
    pthread_join(recvThread, NULL);

    // 关闭socket
    close(hSock);

    return 0;
}
~~~

